package Day_0214.Tomcat;

/**
 * @author zxc
 * @date 2023/02/14 20:31
 **/
public class Tomcat_Memory_Tuning {
    public static void main(String[] args) {
        /**
         * Tomcat中内存调优
         * ===》
         * 1.内存方式的设置是在 catalina.sh 中，调整一下 JAVA_OPTS 变量即可，
         * 因为后面的启动参数会把 JAVA_OPTS 作为 JVM 的启动参数来处理。
         *
         * 2.具体设置如下：
         * JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k-XX:NewRatio=4 -XX:SurvivorRatio=4"
         *
         * 3.其各项参数如下：
         * （1）-Xmx3550m：
         *  设置 JVM 最大可用内存为 3550M。
         *
         * （2）-Xms3550m：
         *  设置 JVM 初始内存为 3550m。
         *  此值可以设置与-Xmx 相同，以避免每次垃圾回收完成后， JVM 重新分配内存。
         *
         * （3）-Xmn2g：
         *  设置年轻代大小为 2G。
         *  整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。
         *  持久代一般固定大小为 64m，所以增大年轻代后，将会减小年老代大小。
         *  此值对系统性能影响较大，Sun 官方推荐配置为整个堆的 3/8。
         *
         * （4）-Xss128k：
         *  设置每个线程的堆栈大小。
         *  JDK5.0 以后每个线程堆栈大小为 1M，以前每个线程堆栈大小为 256K。
         *  更具应用的线程所需内存大小进行调整。在相同物理内存下，减小这个值能生成更多的线程。
         *  但是操作系统对一个进程内的线程数还是有限制的，不能无限生成，经验值在 3000~5000 左右。
         *
         * （5）-XX:NewRatio=4:
         *  设置年轻代（包括 Eden 和两个 Survivor 区）与年老代的比值（除去持久代）。
         *  设置为 4，则年轻代与年老代所占比值为 1：4，年轻代占整个堆栈的 1/5
         *
         * （6）-XX:SurvivorRatio=4：
         *  设置年轻代中 Eden 区与 Survivor 区的大小比值。
         *  设置为4，则两个 Survivor 区与一个 Eden 区的比值为 2:4，一个 Survivor 区占整个年轻代的 1/6
         *
         * （7）-XX:MaxPermSize=16m:
         *  设置持久代大小为 16m。
         *
         * （8）-XX:MaxTenuringThreshold=0：
         * 设置垃圾最大年龄。
         * 如果设置为 0 的话，则年轻代对象不经过 Survivor 区，直接进入年老代。对于年老代比较多的应用，可以提高效率。
         * 如果将此值设置为一个较大值，则年轻代对象会在 Survivor 区进行多次复制，
         * 这样可以增加对象在年轻代的存活时间，增加在年轻代被回收的概率。
         *
         */
    }
}
